package dados;


import java.util.ArrayList;
import java.io.*;
import negocios.excecoes.*;
import negocios.cinemaBeans.Filme;

@SuppressWarnings("serial")
public class RepositorioFilme implements Serializable {
	private ArrayList<Filme> arrayFilme = new ArrayList<Filme>();


	private static RepositorioFilme instance;

	
	public static RepositorioFilme getInstance(){
		instance = recuperaArquivoFilme();
		
		if (instance == null){
				instance = new RepositorioFilme();
		}
		return instance;
	}
	
	
	
	private RepositorioFilme(){
		
	}



	public void adicionaFilme(Filme filme) throws FRIException, IOException, RepFilmeException{
		if(!filme.getTitulo().equals(null) && filme.getTitulo().length()>0){
			this.arrayFilme.add(filme);
			gravaArquivoFilme();
		}else{
			FRIException fri = new FRIException(filme);
			throw fri;
		}

	}


	public ArrayList<Filme> listaFilme(){
		return this.arrayFilme;
	}


	public void removeFilme(Filme filme){
		this.arrayFilme.remove(filme);
	}

	
	protected static void gravaArquivoFilme() throws FRIException, IOException, RepFilmeException{
		
		File f = new File("filme.dat");
		
		if (!f.exists()){
			f.createNewFile();
		}
		
		FileOutputStream faos = new FileOutputStream(f);
		ObjectOutputStream w = new ObjectOutputStream(faos);
		w.writeObject(instance);
		w.close();
		
	}
	
	protected static RepositorioFilme recuperaArquivoFilme() {
		RepositorioFilme clone = null;
		
		try{
			File f = new File("filme.dat");
			FileInputStream fis = new FileInputStream(f);
			ObjectInputStream ois = new ObjectInputStream(fis);
			Object rep = ois.readObject();
			clone = (RepositorioFilme)rep;
			ois.close();	
		} catch (FileNotFoundException e) {
			return clone;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return clone;
	}
}
